import { request } from 'umi';

/**
 * get one record by id
 */
export async function getUserById(id: number, params: object = {}) {
  return request<ApiResponse.ResultModel<UserType.UserResponse>>(`/api/user/getById/${id}`, {
    method: 'GET',
    params: params,
  });
}

/**
 * get all records
 */
export async function getUserAll(params: object = {}) {
  return request<ApiResponse.ResultModel<UserType.UserResponse>>(`/api/user/getAll`, {
    method: 'GET',
    params: params,
  });
}

/*
 * get records by page
 */
export async function getUserPageList(params: object = {}) {
  return request<PageInfo.PageResponse<UserType.UserResponse>>(`/api/user/getAll`, {
    method: 'GET',
    params: params,
  });
}

/*
 * update partial field of record
 */
export async function commonUpdate(id: number, fieldName: string, value: string) {
  return request<PageInfo.PageResponse<UserType.User>>(`/api/user/PatchById?id=${id}`, {
    method: 'PATCH',
    headers: {
      'Content-Type': 'application/json',
    },
    data: [
      {
        id: id,
        op: 'replace',
        path: `/${fieldName}`,
        value: value,
      },
    ],
  });
}

/*
 * update record
 */
export async function updateUser(params: UserType.UserResponse) {
  return request<ApiResponse.ResultModel<boolean>>(`/api/user/put`, {
    method: 'put',
    headers: {
      'Content-Type': 'application/json',
    },
    data: [params],
  });
}

/*
 * add one record
 */
export async function addUser(params: UserType.UserResponse) {
  return request<ApiResponse.ResultModel<UserType.UserResponse>>('/api/user/add', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: [params],
  });
}

export async function deleteUser(params: DeleteRequest) {
  return request<ApiResponse.ResultModel<boolean>>(`/api/user/delete`, {
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/json',
    },
    data: [params.id],
  });
}
